module add16 ( input[15:0] a, input[15:0] b, input cin, output[15:0] sum, output cout );

    wire cin;
    wire [14:0] out;

    add1 inst1 (.a(a[0]), .b(b[0]), .cin(cin), .sum(sum[0]), .cout(out[0]));
    add1 inst2 (.a(a[1]), .b(b[1]), .cin(out[0]), .sum(sum[1]), .cout(out[1]));
    add1 inst3 (.a(a[2]), .b(b[2]), .cin(out[1]), .sum(sum[2]), .cout(out[2]));
    add1 inst4 (.a(a[3]), .b(b[3]), .cin(out[2]), .sum(sum[3]), .cout(out[3]));
    add1 inst5 (.a(a[4]), .b(b[4]), .cin(out[3]), .sum(sum[4]), .cout(out[4]));
    add1 inst6 (.a(a[5]), .b(b[5]), .cin(out[4]), .sum(sum[5]), .cout(out[5]));
    add1 inst7 (.a(a[6]), .b(b[6]), .cin(out[5]), .sum(sum[6]), .cout(out[6]));
    add1 inst8 (.a(a[7]), .b(b[7]), .cin(out[6]), .sum(sum[7]), .cout(out[7]));
    add1 inst9 (.a(a[8]), .b(b[8]), .cin(out[7]), .sum(sum[8]), .cout(out[8]));
    add1 inst10 (.a(a[9]), .b(b[9]), .cin(out[8]), .sum(sum[9]), .cout(out[9]));
    add1 inst11 (.a(a[10]), .b(b[10]), .cin(out[9]), .sum(sum[10]), .cout(out[10]));
    add1 inst12 (.a(a[11]), .b(b[11]), .cin(out[10]), .sum(sum[11]), .cout(out[11]));
    add1 inst13 (.a(a[12]), .b(b[12]), .cin(out[11]), .sum(sum[12]), .cout(out[12]));
    add1 inst14 (.a(a[13]), .b(b[13]), .cin(out[12]), .sum(sum[13]), .cout(out[13]));
    add1 inst15 (.a(a[14]), .b(b[14]), .cin(out[13]), .sum(sum[14]), .cout(out[14]));
    add1 inst16 (.a(a[15]), .b(b[15]), .cin(out[14]), .sum(sum[15]), .cout(cout));

endmodule